package com.lplb.common.redis.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.util.UUID;

/**
 * 基于redis的 token 工具类
 *
 * @author ws
 * @mail 1720696548@qq.com
 * @date 2020/3/5 0005 9:24
 * @return
 */
@Component
public class RedisTokenUtil {

    @Autowired
    private RedisUtil redisUtil;

    /**
     * 生成令牌(uuid) + 永久有效
     *
     * @param keyPrefix  令牌key前缀
     * @param redisValue redis存放的值
     * @return 返回token
     */
    public String createToken(String keyPrefix, String redisValue) {
        return createToken(keyPrefix, redisValue, null);
    }


    /**
     * 生成令牌(uuid)  + 设置有效期
     *
     * @param keyPrefix  令牌key前缀
     * @param redisValue redis存放的值
     * @param time       有效期（单位秒）
     * @return 返回token
     */
    public String createToken(String keyPrefix, String redisValue, Long time) {
        if (StringUtils.isEmpty(redisValue)) {
            new Exception("redisValue Not nul");
        }
        String token = keyPrefix + UUID.randomUUID().toString().replace("-", "");
        redisUtil.set(token, redisValue, time);
        return token;
    }


    /**
     * 根据token获取redis中的value值
     *
     * @param token
     * @return
     */
    public String getToken(String token) {
        if (StringUtils.isEmpty(token)) {
            return null;
        }
        if (!redisUtil.hasKey(token)) {
            return null;
        }
        String value = redisUtil.get(token).toString();
        return value;
    }


    /**
     * 移除token
     *
     * @param token
     * @return
     */
    public Boolean removeToken(String token) {
        if (StringUtils.isEmpty(token)) {
            return null;
        }
        redisUtil.del(token);
        return true;
    }

    /**
     * 更新token的val值
     *
     * @param token
     * @return
     */
    public Boolean replaceToken(String token, String redisValue, Long time) {
        if (StringUtils.isEmpty(token)) {
            return null;
        }
        boolean bool = redisUtil.set(token, redisValue, time);
        return bool;
    }
}
